#include <stdio.h>

#define mod(a,m) (((a)%m)+m)%m

// calcula a*x + b*y = mcd(a, b) = d 
void euclides_ext(int a, int b, int *x,int *y, int *d){
	int q, r, x1, x2, y1, y2;
	
	if (b == 0) {
		*d = a, *x = 1, *y = 0;
	} else {
		x2 = 1, x1 = 0, y2 = 0, y1 = 1;

		while (b != 0) {
			q = a / b;
			r = a - q * b;
			
			*x = x2 - q * x1;
			*y = y2 - q * y1;
			
			a = b, b = r;
			x2 = x1, x1 = *x;
			y2 = y1, y1 = *y;
		}
		*d = a, *x = x2, *y = y2;
	}
	if (*d < 0) {
		*d *= -1, *x *= -1, *y *=-1;
	}
}

// verifica que la solucion hallada satisface todas las condiciones
bool verificar(const int casos[], int resultados[],int a, int b, int n ){
	int y;
	for(short i = 0; i<n; ++i){
		y = mod(a * casos[i] + b, 10001);
		if (i+1 < n &&  casos[i+1] != mod(a * y + b, 10001)){
			return false;
		}
		resultados[i] = y;
	}
	return true;
}

// dado un sistema a*x = b (mod 10001) setea r y m
// tal que x = r (mod m). S el sistema no tiene solucion retorna false
bool resolverSistema (int a, int b, int& r, int &m ){
	//a*x = b (mod 10001) <=> 1) a*x = b (mod 73) && 2)a*x = b (mod 137)	
	int mcd1,s1,t1;
	int mcd2,s2,t2;
	euclides_ext(a, 73, &s1, &t1, &mcd1);
	euclides_ext(a, 137, &s2, &t2, &mcd2);
	
	// si alguna de las dos ecuaciones no tiene solucion => no hay solucion
	if (b % mcd1 != 0 || b % mcd2 != 0) return false; 

	// En cualquier otro caso si hay solución. Analizo los 4 casos posibles:
	if (mcd1 == 1 && mcd2 == 1) {
		int r1, r2;
		r1 = mod(s1 * b, 73); // x = r1 (mod 73)
		r2 = mod(s2 * b, 137); // x = r2 (mod 137)
		// Aplicando Teorema chino del resto
		r = mod(mod(r1*137*8,10001)+mod(r2*73*(-15), 10001),10001);
		m = 10001;
	}
	
	if (mcd1 == 1 && mcd2 == 137) {
		// se tiene que a es multiplo de 137 => cualquier x satisface 2) 
		// solo tomo en cuenta la ecuacion 1)
		r = mod(s1 * b, 73);
		m = 73;
	}
	
	if (mcd1 == 73 && mcd2 == 1) {
		// se tiene que a es multiplo de 73 => cualquier x satisface 1) 
		// solo tomo en cuenta la ecuacion 2)
		r = mod(s2 * b, 137);
		m = 137;
	}
	
	if (mcd1 == 73 && mcd2 == 137) {
		// se tiene que a es multiplo de 73 y de 137 => a es multiplo de 10001 
		// => cualquier x satisface la ecuacion a*x = b (mod 10001)
		r = 0;
		m = 1;
	}
	return true;
}


int main() {
	int n;
    scanf ("%d",&n);
    int casos[n];
	for(short i =0; i<n; ++i) scanf("%d",&casos[i]);

	if (n < 3 || (n > 1 && (casos[0] == casos[1]))){
		for(short i =0; i<n; ++i) printf("%d\n", casos[n-1] );
	} else {
		int resultados[n];
		int a;
		int e = casos[0] - casos[1];
		int f = casos[1] - casos[2];
		// se tiene que: e * a^2 = f (mod 10001)
		// tengo que hallar los posibles valores de a^2
		int ra, incrementoa;
		
		// el sistema e * a^2 = f (mod 10001) siempre tiene solucion (por enunciado)
		resolverSistema(e,f, ra, incrementoa);
		
		int j = 0;
		for (int res = ra; res < 100020001; res += incrementoa){
			while(j*j < res){
				j++;
			}
			if (j*j == res){
				a = j;
				int rb, incrementob;
				// busco b tal que (a+1)* b = x2 - a^2 * x1 (mod 10001)
				int t2 = mod((mod(casos[1],10001)- mod(mod(a*a, 10001)*mod(casos[0],10001),10001)),10001);
				if(resolverSistema(a+1,t2, rb, incrementob)){;
					for (int b = rb; b < 10001; b += incrementob){
						if (verificar(casos, resultados, a, b, n)){
							for(short i = 0; i<n; ++i) printf("%d\n", resultados[i]);
							return 0;
						}
					} 
				}
			}
		}	
	}
	
	return 1;
}
